package com.appcaja.server.controller;

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.appcaja.server.model.Orden;
import com.appcaja.server.service.OrdenService;

/**
 * Controlador para manejar ordenes
 *
 * @author Jere
 */

@Controller
@RequestMapping("/servicios/ordenes")
public class OrdenController {

	@Autowired
	private OrdenService ordenService;
	
	/**
	 * Lista todas las ordenes disponibles. 
	 *
	 * @return La lista de ordenes.
	 */
	@RequestMapping(value = "/obtenerOrdenes", method = RequestMethod.GET)
	public @ResponseBody List<Orden> obtenerOrdenes() {
		return ordenService.obtenerOrdenes();
	}

	/**
	 * Busca una orden por CGI.
	 *
	 * @param cgi Numero identificador CGI
	 * @return La orden correspondiente.
	 */
	@RequestMapping(value = "/obtenerOrden/{cgi}", method = RequestMethod.GET)
	public @ResponseBody Orden obtenerOrden(@PathVariable("cgi") long cgi) {
		return ordenService.obtenerOrden(cgi);
	}
	
	/**
	 * Busca y filtra ordenes por expediente, causanteBeneficiario o estadoVerif.
	 *
	 *  @param expediente Numero de expediente
	 *  @param causanteBeneficiario Nombre del causante beneficiario
	 *  @param estadoVerif el estado de verificacion de la orden
	 * @return La lista de ordenes filtradas, o todas las ordenes si no hay filtros.
	 */
	@RequestMapping(value = "/buscarOrdenes", method = RequestMethod.GET)
	public @ResponseBody List<Orden> obtenerOrden(@RequestParam(value="expediente", required=false) String expediente,
			@RequestParam(value="causanteBeneficiario", required=false) String causanteBeneficiario,
			@RequestParam(value="estadoVerif", required=false) String estadoVerif,
			@RequestParam(value="cgi", required=false) String cgi,
			@RequestParam(value="fechaDesde", required=false) String fechaDesde,
			@RequestParam(value="fechaHasta", required=false) String fechaHasta) {
		return ordenService.buscarOrdenes(expediente,
				causanteBeneficiario,
				estadoVerif,
				cgi,
				fechaDesde,
				fechaHasta);
	}
}
